<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // reduce 方法，数组的求和方法

      let arr = [2, 3, 4, 5]

      // ------------------------------- 语法一：有初始值 -------------------------------
      // let res1 = arr.reduce((总和, 数组元素) => {
      //   return 累加的式子
      // }, 初始值)

      // let res1 = arr.reduce((t, c) => {
      //   // 有初始值，开始的时候，t = 初始值； c = 第1个元素
      //   // 第1次循环：t = 100; c = 2    返回 100 + 2 = 102
      //   // 第2次循环：t = 102; c = 3    返回 102 + 3 = 105
      //   // 第3次循环：t = 105; c = 4    返回 105 + 4 = 109
      //   // 第4次循环：t = 109; c = 5    返回 109 + 5 = 114
      //   return t + c
      // }, 100)

      // console.log(res1)

      // ------------------------------- 语法二：没有初始值 -------------------------------
      // let res2 = arr.reduce((总和, 数组元素) => {
      //   return 累加的式子
      // })

      // let res2 = arr.reduce((t, c) => {
      //   // 因为没有初始值，所以开始的时候， t = 第1个元素； c = 第2个元素
      //   // 第1次循环： t = 2;  c = 3;   返回 2 + 3 = 5
      //   // 第2次循环： t = 5;  c = 4;   返回 5 + 4 = 9
      //   // 第3次循环： t = 9;  c = 5;   返回 9 + 5 = 14
      //   return t + c
      // })

      // console.log(res2)

      // ----------------------------- 实例 ---------------------------------------
      let list = [
        { id: 21, subject: '语文', score: 90 },
        { id: 32, subject: '数学', score: 100 },
        { id: 35, subject: '艺术', score: 100 }
      ]

      // let res = list.reduce(() => {}, 初始值)
      let res = list.reduce((t, c) => {
        // 有初始值，t = 0  c = 第1个元素
        // 第1次循环：t = 0;  c = 第1个元素；   返回 0 + 90 = 90
        // 第2次循环：t = 90; c = 第2个元素；   返回 90 + 100 = 190
        // 第3次循环：t = 190;c = 第3个元素；   返回 190 + 100 = 290
        return t + c.score
      }, 0)

      console.log(res)
    </script>
  </body>
</html>
